package cn.bobohost.crmrbacdemo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

/**
 * 代码生成器
 */
public class MyBastisPlusGenerator {
    public static void main(String[] args) {
        // 使用 FastAutoGenerator 快速配置代码生成器
        //设置数据库和账户密码
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/crm_rbac?serverTimezone=GMT%2B8"
                        , "root", "")
                //全局配置
                .globalConfig(builder -> {
                    builder.author("波波老师") // 设置作者
                            //默认情况下，生成代码之后，会自动在Windows中打开生成的代码的文件夹
//                            .disableOpenDir()//不打开文件夹
//                            .outputDir("src/main/java"); // 输出目录，linux
                            .outputDir("src\\main\\java"); // 输出目录,windows
                })
                //包配置
                .packageConfig(builder -> {
                    //如果在一个项目中，建议先整一个demo的临时包名来测试。弄好后，再改成正式。防止正式代码被覆盖
                    builder
//                            .parent("cn.bobohost.crmrbacdemo") // 设置父包名--测试
                            .parent("cn.bobohost.crmrbac") // 设置父包名--测试
//                            .parent("cn.bobohost.crmrbac") // 设置父包名--正式
                            .entity("pojo.po") // 设置实体类包名
                            .mapper("dao.mapper") // 设置 Mapper 接口包名
                            .service("service") // 设置 Service 接口包名
                            .serviceImpl("service.impl") // 设置 Service 实现类包名
                            .controller("web.controller") // 设置 Controller 包名
                            .xml("dao.mapperxml"); // 设置 Mapper XML 文件包名,建议和mapper接口的包路径一样
                })
                //策略配置：配置具体每一层代码的一些策略
                .strategyConfig(builder -> {
                    //增加表匹配(内存过滤)，支持正则匹配，如 ^t_.* 匹配所有以 t_ 开头的表名；sys_开头的：^sys_.*
                    builder
//                            .addInclude(".*") // 设置需要生成的表名
                            .addExclude("department","sys_department")//排除这两个表
                            //实体类的配置
                            .entityBuilder()
                            .enableLombok() // 启用 Lombok
                            .enableTableFieldAnnotation() // 启用字段注解
                            .idType(IdType.AUTO)//设置默认主键

                            //业务层配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService")  //格式化接口类的文件名
//                            .formatServiceImplFileName("%sServiceImpl")

                            //dao的mapper配置
                            .mapperBuilder()
//                            .formatMapperFileName("%sDao") //文件名后缀变成Dao了

                            //Controller 策略配置
                            .controllerBuilder()
//                            .enableRestStyle(); // 启用 REST 风格，开启生成@RestController 控制器，默认是@Controller


                            .build();//构建
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 模板引擎
                .execute(); // 执行生成

    }
}
